package classic;

/**
 * 每个位数上字符都不相同的序列的全排列
 *
 * @author zj
 */
public class AllPermutation {

    public static void main(String args[]) {
        StringBuffer s = new StringBuffer("12345");
        if (!s.equals("")) {
            allPermutation(s, 0);
        }
    }

    /**
     * @param s
     * @param index 指向当前我们做排列操作的子字符串的起始位置
     */
    public static void allPermutation(StringBuffer s, int index) {
        if (index >= s.length()) {
            System.out.println(s);
        } else {
            //循环交换index处字符和其后所有字符的值，每次循环后面注意恢复原样，以便不影响后面的交换
            for (int i = index; i < s.length(); i++) {
                //交换
                char c1 = s.charAt(i);
                char c2 = s.charAt(index);
                s.setCharAt(i, c2);
                s.setCharAt(index, c1);

                //递归
                allPermutation(s, index + 1);

                //复原
                c1 = s.charAt(i);
                c2 = s.charAt(index);
                s.setCharAt(i, c2);
                s.setCharAt(index, c1);
            }
        }
    }
}
